import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.po.LikeTable;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

public class MPGeneratorUtil {

    /**
     * MySQL相关配置
     */
    private static String host = "thetsing.mysql.cn-chengdu.rds.aliyuncs.com";
    private static String port = "3306";
    private static String database = "cedap";
    private static String username = "thetsing";
    private static String password = "TheTsing0725";
    /**
     * 模块名
     */
    private static String modelName = "cedap-rest";
    /**
     * 包名
     */
    private static String packageName = "com.tsing.cedap.rest";

    public static void main(String[] args) {
        FastAutoGenerator.create(
                "jdbc:mysql://" + host + ":" + port + "/" + database + "?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"
                , username
                , password)
                // 全局配置
                .globalConfig(builder -> {
                    builder
                            //.fileOverride() // 覆盖已生成文件
                            .disableOpenDir() // 禁止打开输出目录
                            .author("TheTsing") // 作者名
                            //.enableSwagger() // 开启 swagger 模式
                            .dateType(DateType.ONLY_DATE) // 时间策略
                            .outputDir(System.getProperty("user.dir") + "/" + modelName + "/src/main/java"); // 指定输出目录
                })
                //包配置
                .packageConfig(builder -> {
                    builder.parent(packageName) // 父包名
                            .entity("entity") // Entity 包名
                            .service("service") // Service 包名
                            .serviceImpl("service.impl") // Service Impl 包名
                            .mapper("mapper") // Mapper 包名
                            .xml("mapper.xml") // Mapper XML 包名
                            .controller("controller"); // Controller 包名
                })
                //模板配置
                .templateEngine(new FreemarkerTemplateEngine())
                // 策略配置
                .strategyConfig(builder -> {
                    builder
                            .likeTable(new LikeTable("cedap_")) // 模糊表匹配
                            //.addInclude("t_simple") // 增加表匹配
                            .addTablePrefix("cedap_") // 增加过滤表前缀
                            // Entity 策略配置
                            .entityBuilder()
                            .enableChainModel() // 开启链式模型
                            .enableLombok() // 开启 lombok 模型
                            .logicDeleteColumnName("deleted") // 逻辑删除字段名
                            .naming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
                            .idType(IdType.ASSIGN_ID) // 全局主键类型
                            .formatFileName("%sEntity"); // 格式化文件名称
                })
                .execute();
    }
}